home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / m68k / tutor.arc / MMDI.SA < prev    next >
Text File  |  1990-01-05  |  10KB  |  330 lines

  1. MMDI     IDNT      1,1       Modify Memory command WITH asm/disasm   11/27/81
  2.  
  3.          XDEF      MCMD
  4.          XDEF      MMCMD
  5.          XDEF      MM90
  6.  SPC 1
  7.          XREF      CKADDR
  8.          XREF      CKWADR
  9.          XREF      FIXBUF
  10.          XREF      FIXDCRLF
  11.          XREF      FNEXTF
  12.          XREF      FRELADDR
  13.          XREF      GETA
  14.          XREF      GETEXP
  15.          XREF      MACSBUG
  16.          XREF      MSG
  17.          XREF      MSGEOT
  18.          XREF      MSG017
  19.          XREF      OUTPUT
  20.          XREF      OUT1CR
  21.          XREF      PNT2HX
  22.          XREF      PNT4HX
  23.          XREF      PNT8HX
  24.          XREF      PORTIN1
  25.          XREF      PORTIN1N
  26.          XREF      SYNTAX
  27.          XREF.S    SYSTACK
  28.          XREF      DCODE68K            DISASSEMBLER
  29.          XREF      CODE68K             ASSEMBLER
  30.  PAGE
  31.          SECTION   11
  32. * MODIFY MEMORY
  33. *  COMMON REGISTER USAGE
  34. *   A6  IO BUFFER POINTER  END
  35. *   A5  IO BUFFER POINTER  START
  36. *   A4  ADDRESS TO MODIFY
  37. *   A3
  38. *   A2
  39. *   A1
  40. *   A0
  41. *   D7  DATA READ (DATA STORED)
  42. *   D6  SIZE  1/2/4 BYTES  (ASM/DISASM 2 - 10 BYTES)
  43. *   D5  OVERRIDE BYTE (80XX=NON VERIFY)  (XX80=BYTE SIZE)
  44. *
  45. * ;OPTIONS
  46. *   ;W  WORD
  47. *   ;L  LONG WORD (4 BYTES)
  48. *   ;DI DISASSEMBLE
  49. *     ;O  ODD ADDRESSES ONLY
  50. *     ;V  EVEN ADDRESSES ONLY
  51. *       ;N  NON-VERIFY
  52. *
  53. MMDI     BSR       CKWADR
  54.          BSR       CKADDR
  55.          CLR.L     D6        SIZE = 0
  56. MMDI22   ADD.L     D6,A4     PC = PC + SIZE
  57. MMDI23   BSR       FIXBUF    A5 & A6 = POINTER TO BUFFER
  58.  
  59. *                  ENTRY
  60. *                   A4 = PROGRAM COUNTER
  61. *                   A5 = POINTER TO STORE DISASSEMBLED LINE
  62.          MOVEM.L   (A4),D0-D2          DATA TO DISASSEMBLE
  63.          BSR       DCODE68K
  64. *                  RETURN
  65. *                   A4 = NEW PROGRAM COUNTER
  66. *                   A5 = PTR START BUFFER
  67. *                   A6 = PRT END BUFFER
  68. *                   D6 = NUMBER OF BYTES DISASSEMBLED
  69.  
  70.          MOVE.B    #'?',(A6)+
  71.          BSR       OUTPUT
  72.  
  73. MMDI31   BSR       FIXBUF
  74.          BSR       PORTIN1N            INPUT ASSEMBLY SOURCE (NO LINE FEED)
  75.          CMP.L     A5,A6
  76.          BNE.S     MMDI34
  77.          BSR       OUT1CR              NOTHING INPUT; OUTPUT LINE FEED
  78.          BRA       MMDI23
  79.  
  80. MMDI34   SUB.L     D6,A4               BACKUP PC
  81.  
  82.          CMP.B     #'.',(A5)
  83.          BEQ       MM905               CLOSE
  84.  
  85.          LEA       SYSTACK+17,A3        STORE BUFFER
  86.  
  87. *                  A3 = STORE POINTER
  88. *                  A4 = PROGRAM COUNTER
  89. *                  A5 = POINTER TO DATA TO ASSEMBLE
  90. *                  A6 = POINTER TO END OF SOURCE DATA
  91.          BSR       CODE68K             ASSEMBLE
  92. *                  A3 = POINTER TO LINE ASSEMBLED
  93. *                  A4 = PROGRAM COUNTER
  94. *                  A6 = POINTER END OF LINE ASSEMBLED
  95. *                  D0-D2 = DATA ASSEMBLED
  96. *                  D6 = NUMBER OF BYTES ASSEMBLED
  97. *                  D7 = ERROR FLAG & POSITION OF ERROR
  98.  
  99.          MOVE.L    A3,A5
  100.          ADD.L     #78,A3              A3 = MAX LINE
  101. MMDI26   CMP.L     A6,A3
  102.          BCS.S     MMDI27
  103.          MOVE.B    #' ',(A6)+          SPACE FILL LINE
  104.          BRA       MMDI26
  105. MMDI27   BSR       OUT1CR              PRINT LINE JUST ENTERED
  106.  
  107.          TST.B     D7
  108.          BNE.S     MMDI30              ERROR; DON'T STORE DATA
  109.  
  110.          LEA       SYSTACK+4,A2        A2 = TEMP AREA
  111.          MOVEM.L   D0/D1/D2,-(A2)      STORE DATA
  112.          MOVE.L    D6,D1               D1 = NUMBER OF BYTES TO STORE
  113.          SUB.L     #1,D1
  114.          MOVE.L    A4,A1               A1 = DATA STORE POINTER
  115. MMDI29   MOVE.B    (A2)+,D0
  116.          MOVE.B    D0,(A1)
  117.          MOVE.B    (A1)+,D2            INSURE DATA STORED
  118.          CMP.B     D0,D2
  119.          BNE       MM90
  120.          DBRA      D1,MMDI29
  121.          BRA       MMDI22
  122.  
  123. MMDI30   BSR       FIXBUF
  124. MMDI44   MOVE.B    #' ',(A6)+          SPACES
  125.          DBRA      D7,MMDI44
  126.  
  127.          MOVE.B    #'X',-1(A6)         X UNDER ERROR
  128.          MOVE.B    #'?',(A6)+          ? ALLOW REINPUT
  129.          BSR       OUTPUT
  130.          BRA       MMDI31
  131.  
  132.  PAGE
  133. MCMD     DS        0         "M" Alias for "MM" Command
  134. MMCMD    DS        0         "MM" Command -Memory Modify-
  135.          LEA       SYNTAX(PC),A0 A0=ERROR RETURN
  136.          BSR       FNEXTF
  137.          BSR       GETA
  138.          MOVE.L    D0,A4     A4= ADDRESS OF DATA
  139.          MOVE.L    #1,D6     SIZE = BYTE
  140.          CLR.L     D5        NO OVERRIDE
  141.  SPC 1
  142. MM05     CMP.L     A5,A6
  143.          BCS.S     MM10      AT END OF BUFFER
  144.  SPC 1
  145. * LOOK FOR ;OPTIONS
  146.          MOVE.B    (A5)+,D0
  147.          CMP.B     #';',D0
  148.          BNE       MM05      IGNORE NOT ;
  149.  SPC 1
  150.          MOVE.B    (A5)+,D0  GET NEXT CHAR
  151.          CMP.B     #'D',D0
  152.          BNE.S     MM045
  153.  
  154.          CMP.B     #'I',(A5)+          DISSAMBLY OPTION
  155.          BNE       MM05
  156.          BRA       MMDI
  157.  
  158. MM045    CMP.B     #'W',D0
  159.          BEQ.S     MM065     ;W   D6=2
  160.  SPC 1
  161.          CMP.B     #'L',D0
  162.          BNE.S     MM054
  163.          MOVE.B    #4,D6     ;L   D6=4
  164.          CLR.B     D5        RESET BYTE OVERRIDE
  165.          BRA       MM05
  166.  SPC 1
  167. MM054    CMP.B     #'N',D0
  168.          BNE.S     MM056
  169.          OR.W      #$8000,D5 ;N  D5=$8000
  170.          BRA       MM05
  171.  SPC 1
  172. MM056    CMP.B     #'O',D0
  173.          BNE.S     MM058
  174.          MOVE.L    A4,D0     ;O
  175.          OR.B      #1,D0     FORCE ODD ADDRESS
  176.          BRA.S     MM060
  177.  SPC 1
  178. MM058    CMP.B     #'V',D0
  179.          BNE       SYNTAX    ERROR
  180.          MOVE.L    A4,D0     ;V
  181.          AND.B     #$FE,D0   FORCE EVEN ADDRESS
  182. MM060    MOVE.L    D0,A4
  183.          OR.B      #$80,D5   BYTE OVERRIDE
  184. MM064    MOVE.B    #2,D6     SIZE = WORD (2 BYTES)
  185.          BRA       MM05
  186.  SPC 1
  187. MM065    CLR.B     D5        RESET BYTE OVERRIDE
  188.          BRA       MM064
  189.  SPC 1
  190. * FORMAT ADDRESS FOR PRINTING
  191. MM10     MOVE.L    A4,D0
  192.          CMP.B     #1,D6
  193.          BEQ.S     MM11      "BYTE"
  194.          TST.B     D5
  195.          BMI.S     MM11      BYTE OVERRIDE
  196.          BSR       CKWADR   CHK ALLIGNMENT
  197. MM11     BSR       CKADDR   *
  198.          BSR       FIXBUF
  199.          BSR       FRELADDR            FORM RELATIVE ADDRESS
  200.          MOVE.B    #' ',(A6)+  SPACE
  201.  SPC 1
  202.          TST.W     D5
  203.          BMI.S     MM18      NON-VERIFY (DON'T READ MEMORY)
  204.  SPC 1
  205. * READ DATA FROM MEMORY & FORMAT IT
  206.          TST.B     D5
  207.          BMI.S     MM12      BYTE OVERRIDE
  208.  SPC 1
  209.          CMP.B     #2,D6
  210.          BEQ.S     MM14      WORD
  211.          CMP.B     #4,D6
  212.          BEQ.S     MM16      LONG WORD
  213.  SPC 1
  214. * BYTE
  215. MM12
  216.          MOVE.B    (A4),D7   D7 = DATA READ
  217.          MOVE.L    D7,D0
  218.          BSR       PNT2HX    FORMAT BYTE
  219.          BRA.S     MM18
  220.  SPC 1
  221. * WORD
  222. MM14
  223.          MOVE.W    (A4),D7
  224.          MOVE.L    D7,D0
  225.          BSR       PNT4HX    FORMAT WORD
  226.          BRA.S     MM18
  227.  SPC 1
  228. * LONG WORD
  229. MM16
  230.          MOVE.L    (A4),D7
  231.          MOVE.L    D7,D0
  232.          BSR       PNT8HX    FORMAT LONG WORD
  233.  SPC 1
  234. MM18     MOVE.B    #' ',(A6)+          SPACE
  235.          MOVE.B    #'?',(A6)+
  236.          BSR       OUTPUT
  237.  PAGE
  238. * READ USER INPUT
  239. *  [DATA] (CR)   NEXT
  240. *           ^    LAST
  241. *           =    SAME
  242. *           .    EXIT
  243.  SPC 1
  244.          BSR       FIXBUF
  245.          BSR       PORTIN1
  246.          CMP.L     A5,A6
  247.          BEQ       MM50      NO DATA (CR ONLY)
  248.  SPC 1
  249.          LEA       MM40(PC),A0  A0 = NO PARAMETER RETURN
  250.          BSR       FNEXTF    FIND NEXT FIELD
  251.  SPC 1
  252. * IF = ^ OR .  TAKE ACTION
  253.          MOVE.B    (A5),D0
  254.          CMP.B     #'=',D0
  255.          BEQ       MM10
  256.          CMP.B     #'.',D0
  257.          BEQ       MACSBUG
  258.          CMP.B     #'^',D0
  259.          BEQ.S     MM60
  260.  SPC 1
  261.          BSR       GETEXP    GET DATA
  262.          MOVE.L    D0,D7     D7=DATA STORED
  263.  SPC 1
  264. * WE HAVE DATA; STORE IT
  265.          TST.B     D5
  266.          BMI.S     MM22      BYTE OVERRIDE
  267.  SPC 1
  268.          CMP.B     #2,D6
  269.          BEQ.S     MM24      WORD
  270.          CMP.B     #4,D6
  271.          BEQ.S     MM26      LONG WORD
  272.  SPC 1
  273. * BYTE
  274. MM22
  275.          MOVE.B    D0,(A4)   STORE DATA
  276.          TST.W     D5
  277.          BMI.S     MM40      NO-VERIFY
  278.          MOVE.B    (A4),D0
  279.          CMP.B     D7,D0
  280.          BNE.S     MM90      NO MATCH
  281.          BRA.S     MM40
  282.  SPC 1
  283. * WORD
  284. MM24
  285.          MOVE.W    D0,(A4) STORE
  286.          TST.W     D5
  287.          BMI.S     MM40      DO NOT VERIFY
  288.          MOVE.W    (A4),D0
  289.          CMP.W     D7,D0
  290.          BNE.S     MM90      NO MATCH
  291.          BRA.S     MM40
  292.  SPC 1
  293. * LONG WORD
  294. MM26
  295.          MOVE.L    D0,(A4)
  296.          TST.W     D5
  297.          BMI.S     MM40      DO NOT VERIFY
  298.          MOVE.L    (A4),D0
  299.          CMP.L     D7,D0
  300.          BNE.S     MM90      NO MATCH
  301.  SPC 1
  302. * LOOK FOR  . = ^
  303. MM40     MOVE.B    (A5),D0
  304.          CMP.B     #'.',D0
  305.          BEQ       MACSBUG   DONE
  306.          CMP.B     #'^',D0
  307.          BEQ.S     MM60      BACKUP ADDRESS
  308.          CMP.B     #'=',D0
  309.          BEQ       MM10      ADDRESS STAYS THE SAME
  310.          CMP.B     #' ',D0
  311.          BEQ.S     MM50
  312.          CMP.L     A5,A6
  313.          BNE       SYNTAX    ERROR
  314.  SPC 1
  315. * ADDRESS LOW TO HIGH
  316. MM50     ADD.L     D6,A4
  317.          BRA       MM10
  318.  SPC 1
  319. * ADDRESS HIGH TO LOW
  320. MM60     SUB.L     D6,A4
  321.          BRA       MM10
  322.  SPC 1
  323. MM90     LEA       MSG017(PC),A5  'DATA DID NOT STORE'
  324. MM95     BSR       FIXDCRLF
  325.          BRA       MSG
  326.  
  327. MM905    LEA       MSGEOT(PC),A5
  328.          BRA       MM95
  329.  
  330.          END